package lhy.orm.dao;

import java.sql.SQLException;
import java.util.List;

public interface GenericDao<T> {
    /**
     * 全部获取。
     * @return 对象列表
     */
    List<T> getAll() throws SQLException;

    /**
     * 通过where从句获取。
     * @param whereClause WHERE开头的SQL从句
     * @return 对象列表
     */
    List<T> getBy(String whereClause) throws SQLException;


    /**
     * where从句+表名，适用于多对一/一对多需要访问多个表的情况
     * @param whereClause WHERE开头的SQL从句
     * @param anotherTableName 另一个表的名字
     * @return 对象列表
     */
    List<T> getByFrom(String whereClause,String anotherTableName) throws SQLException;


    /**
     * where从句+表名+列名
     * @param whereClause WHERE开头的SQL从句
     * @param anotherTableName 另一个表的名字
     * @param columnsNeed 需要哪些列，用英文逗号 , 分割
     * @return 对象列表
     */
    List<T> getColumnsByFrom(String whereClause,String anotherTableName,String columnsNeed) throws Exception;

    /**
     * 向表中插入一个对象.
     * @param modelInstance 对象实例
     * @return 表中XX行受影响
     * */
    int insert(T modelInstance) throws SQLException;

    /**
     * 向表中修改一个对象.
     * @param id 对象修改前的ID
     * @param modelInstance 新的对象实例
     * @return 表中XX行受影响
     * */
    int update(Object id, T modelInstance) throws SQLException;

    /**
     * 向表中删除一个对象.
     * @param id 对象的ID
     * */
    int delete(Object id) throws SQLException;
}
